package com.ssy.lingxi.after.sale.repository;

import com.ssy.lingxi.after.sale.entity.ReplaceDeliveryGoodsDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import java.util.List;

/**
 * 售后换货发货
 * @author 伍将
 * @date 2020/9/17
 * @version 2.0.0
 */
public interface ReplaceDeliveryGoodsRepository extends JpaRepository<ReplaceDeliveryGoodsDO, Long>, JpaSpecificationExecutor<ReplaceDeliveryGoodsDO> {

    /***
     * 删除换货发货单
     * @author 伍将
     * @date 2020/9/23
     * @param replaceId:
     * @param deliverType:
     * @param status:
     * @return void
     **/
    void deleteByReplaceIdAndReplaceDeliveryTypeAndStatus(Long replaceId, Integer deliverType, Integer status);

    /***
     * 根据换货id查询已存在换货发货条数
     * @author 伍将
     * @date 2020/9/17
     * @param replaceId:换货id
     * @param deliveryType:发货类型
     * @return java.lang.Integer
     **/
    Integer countByReplaceIdAndReplaceDeliveryType(Long replaceId, Integer deliveryType);

    /***
     * 根据换货id与批次号查询当前换货发货单
     * @author 伍将
     * @date 2020/9/18
     * @param replaceId:换货id
     * @param batchNo:批次号
     * @param deliveryType:发货类型
     * @return com.ssy.lingxi.after.sale.entity.ReplaceReturnDeliveryGoodsDO
     **/
    ReplaceDeliveryGoodsDO findByReplaceIdAndBatchNoAndReplaceDeliveryType(Long replaceId, Integer batchNo, Integer deliveryType);

    /**
     * 根据换货id与发货类型查询发货信息并按批次顺序排序
     * @author 伍将
     * @date 2020/11/30
     * @param replaceId:换货id
     * @param deliveryType:发货类型
     * @return 发货信息列表
     **/
    List<ReplaceDeliveryGoodsDO> findByReplaceIdAndReplaceDeliveryTypeOrderByBatchNo(Long replaceId, Integer deliveryType);

    /**
     * 根据换货id与发货类型查询非指定状态数据
     * @author 伍将
     * @date 2020/12/3
     * @param replaceId:换货id
     * @param deliveryType:发货类型
     * @param status: 状态
     * @return:
     **/
    Boolean existsByReplaceIdAndReplaceDeliveryTypeAndStatusNot(Long replaceId, Integer deliveryType, Integer status);

    /**
     * 根据关联发货单id查询发货单
     * @author 伍将
     * @date 2021/1/4
     * @param deliveryId: 发货单id
     * @return 发货单
     **/
    ReplaceDeliveryGoodsDO findFirstById(Long deliveryId);

    /**
     * 根据关联入库单id查询发货单
     * @author 伍将
     * @date 2021/1/4
     * @param storageId: 入库单id
     * @return 发货单
     **/
    ReplaceDeliveryGoodsDO findFirstByStorageId(Long storageId);

}
